// pages/booking/select-address/index.js
const apiService = require('../../../utils/api.js');
const app = getApp();

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		statusBarHeight: 44,
		storeList: [], // 门店列表
		selectedStore: null, // 选中的门店
		isLoading: false,
		userLocation: null, // 用户位置
		searchKeyword: '', // 搜索关键字
		currentCity: '福州市', // 当前城市
		mapScale: 16, // 地图缩放级别
		mapMarkers: [], // 地图标记点
		mapContext: null, // 地图上下文
		customMarkerIcon: '/assets/common/icon_dot.png' // 自定义标记点图标
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad(options) {
		this.getSystemInfo();
		this.getUserLocation();
		// 获取地图上下文
		this.data.mapContext = wx.createMapContext('map');
		// 创建自定义标记点图标
		this.createCustomMarkerIcon();
	},

	/**
	 * 获取系统信息
	 */
	getSystemInfo() {
		const systemInfo = wx.getSystemInfoSync();
		this.setData({
			statusBarHeight: systemInfo.statusBarHeight || 44
		});
	},

	/**
	 * 获取用户位置
	 */
	getUserLocation() {
		wx.getLocation({
			type: 'gcj02',
			success: (res) => {
				this.setData({
					userLocation: {
						latitude: res.latitude,
						longitude: res.longitude
					}
				});
				this.loadStoreList();
			},
			fail: (error) => {
				console.error('获取位置失败:', error);
				wx.showToast({
					title: '获取位置失败',
					icon: 'none'
				});
				// 使用默认位置（福州市中心）
				this.setData({
					userLocation: {
						latitude: 26.0745,
						longitude: 119.3063
					}
				});
				this.loadStoreList();
			}
		});
	},

	/**
	 * 加载门店列表
	 */
	async loadStoreList() {
		if (!this.data.userLocation) {
			return;
		}

		this.setData({ isLoading: true });

		try {
			const storeManager = app.getStoreManager();
			const storeList = await storeManager.getStoreList();

			if (storeList && storeList.length > 0) {
				// 计算门店距离
				const storesWithDistance = this.calculateStoreDistances(storeList);
				// 设置地图标记点
				const markers = this.createMapMarkers(storesWithDistance);
				
				this.setData({
					storeList: storesWithDistance,
					mapMarkers: markers,
					isLoading: false
				});
			} else {
				throw new Error(result.message);
			}
		} catch (error) {
			console.error('加载门店列表失败:', error);
			this.setData({ isLoading: false });
			wx.showToast({
				title: '门店列表加载失败',
				icon: 'none'
			});
		}
	},

	/**
	 * 加载模拟门店数据
	 */
	loadMockStoreData() {
		const mockStores = [];

		// 计算门店距离
		const storesWithDistance = this.calculateStoreDistances(mockStores);
		// 设置地图标记点
		const markers = this.createMapMarkers(storesWithDistance);
		
		this.setData({
			storeList: storesWithDistance,
			mapMarkers: markers,
			isLoading: false
		});
	},

	/**
	 * 计算门店距离
	 */
	calculateStoreDistances(storeList) {
		if (!this.data.userLocation) {
			return storeList;
		}

		const userLat = this.data.userLocation.latitude;
		const userLng = this.data.userLocation.longitude;

		return storeList.map(store => {
			const distance = this.calculateDistance(
				userLat, userLng,
				store.latitude, store.longitude
			);
			return {
				...store,
				distance: distance.toFixed(1)
			};
		}).sort((a, b) => parseFloat(a.distance) - parseFloat(b.distance));
	},

	/**
	 * 计算两点间距离（公里）
	 */
	calculateDistance(lat1, lng1, lat2, lng2) {
		const R = 6371; // 地球半径，公里
		const dLat = (lat2 - lat1) * Math.PI / 180;
		const dLng = (lng2 - lng1) * Math.PI / 180;
		const a = Math.sin(dLat/2) * Math.sin(dLat/2) +
			Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
			Math.sin(dLng/2) * Math.sin(dLng/2);
		const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
		return R * c;
	},

	/**
	 * 创建自定义标记点图标
	 */
	createCustomMarkerIcon() {
		const ctx = wx.createCanvasContext('marker-canvas');
		ctx.beginPath();
		ctx.arc(8, 8, 7, 0, 2 * Math.PI);
		ctx.setFillStyle('#5098FF');
		ctx.fill();
		ctx.setStrokeStyle('#FFFFFF');
		ctx.setLineWidth(1);
		ctx.stroke();
		ctx.draw();
		
		// 保存图标数据到data中
		this.setData({
			customMarkerIcon: '/assets/common/icon_dot.png' // 暂时使用现有图标
		});
	},

	/**
	 * 创建地图标记点
	 */
	createMapMarkers(storeList) {
		const markers = storeList.map((store, index) => {
			const marker = {
				id: index,
				latitude: store.latitude,
				longitude: store.longitude,
				iconPath: this.data.customMarkerIcon,
				width: 16,
				height: 16,
				callout: {
					content: store.name,
					color: '#070707',
					fontSize: 14,
					borderRadius: 16,
					bgColor: '#FFFFFF',
					padding: 8,
					display: 'BYCLICK'
				},
				// 为所有门店添加 customCallout
				customCallout: {
					anchorY: 0,
					anchorX: 0,
					display: 'ALWAYS',
					name: store.name,
					distance: store.distance,
					logo: store.image || '/assets/common/icon_app.png'
				}
			};

			return marker;
		});

		// 添加用户位置标记
		if (this.data.userLocation) {
			// markers.push({
			// 	id: 9999,
			// 	latitude: this.data.userLocation.latitude,
			// 	longitude: this.data.userLocation.longitude,
			// 	iconPath: '/assets/common/icon_dot.png',
			// 	width: 16,
			// 	height: 16
			// });
		}

		return markers;
	},

	/**
	 * 搜索输入处理
	 */
	onSearchInput(e) {
		const keyword = e.detail.value;
		this.setData({ searchKeyword: keyword });
		this.filterStoreList();
	},

	/**
	 * 筛选门店列表
	 */
	filterStoreList() {
		const { storeList, searchKeyword } = this.data;
		if (!searchKeyword.trim()) {
			return;
		}

		const filteredList = storeList.filter(store => 
			store.name.includes(searchKeyword) || 
			store.address.includes(searchKeyword)
		);

		this.setData({ storeList: filteredList });
	},

	/**
	 * 选择门店
	 */
	selectStore(e) {
		const storeId = e.currentTarget.dataset.storeId;
		const store = this.data.storeList.find(s => s._id === storeId);
		
		if (store) {
			this.setData({ selectedStore: store });
			// 地图中心移动到选中门店
			this.moveMapToStore(store);
		}
	},

	/**
	 * 地图中心移动到门店位置
	 */
	moveMapToStore(store) {
		if (this.data.mapContext && store.latitude && store.longitude) {
			this.data.mapContext.moveToLocation({
				latitude: store.latitude,
				longitude: store.longitude
			});
		}
	},

	/**
	 * 确认选择门店
	 */
	confirmSelection() {
		if (!this.data.selectedStore) {
			wx.showToast({
				title: '请选择门店',
				icon: 'none'
			});
			return;
		}

		// 将选中的门店信息存储到全局数据中
		const app = getApp();
		app.globalData = app.globalData || {};
		app.globalData.selectedStore = this.data.selectedStore;

		// 显示选择成功提示
		wx.showToast({
			title: `已选择${this.data.selectedStore.name}`,
			icon: 'success',
			duration: 1500
		});

		// 延迟返回上一页，让用户看到提示
		setTimeout(() => {
			wx.navigateBack({
				delta: 1,
				success: () => {
					console.log('返回上一页成功');
				},
				fail: (error) => {
					console.error('返回上一页失败:', error);
					// 降级处理：跳转到首页
					wx.switchTab({
						url: '/pages/home/index/index'
					});
				}
			});
		}, 1500);
	},

	/**
	 * 地图区域变化事件
	 */
	onMapRegionChange(e) {
		if (e.type === 'end') {
			// 地图拖动结束后，可以根据新的视野范围重新筛选门店
			console.log('地图视野变化:', e);
		}
	},

	/**
	 * 地图标记点点击事件
	 */
	onMarkerTap(e) {
		const markerId = e.markerId;
		if (markerId !== 9999) { // 排除用户位置标记
			const store = this.data.storeList[markerId];
			if (store) {
				this.setData({ 
					selectedStore: store
				});
				// 滚动列表到对应门店
				this.scrollToStore(store._id);
			}
		}
	},

	/**
	 * 滚动列表到指定门店
	 */
	scrollToStore(storeId) {
		const query = wx.createSelectorQuery();
		query.select(`[data-store-id="${storeId}"]`).boundingClientRect();
		query.exec((res) => {
			if (res[0]) {
				wx.pageScrollTo({
					scrollTop: res[0].top,
					duration: 300
				});
			}
		});
	},


	/**
	 * 城市选择
	 */
	onCitySelect() {
		wx.showToast({
			title: '城市选择功能开发中',
			icon: 'none'
		});
	},

	/**
	 * 重新定位
	 */
	onRelocate() {
		this.setData({ isLoading: true });
		this.getUserLocation();
	},

	/**
	 * 返回上一页
	 */
	onBack() {
		wx.navigateBack({
			delta: 1,
			success: () => {
				console.log('返回上一页成功');
			},
			fail: (error) => {
				console.error('返回上一页失败:', error);
				wx.switchTab({
					url: '/pages/home/index/index'
				});
			}
		});
	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady() {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow() {

	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide() {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload() {

	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh() {
		this.loadStoreList().then(() => {
			wx.stopPullDownRefresh();
		});
	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom() {

	},

	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage() {
		return {
			title: 'PowerPet - 选择门店',
			path: '/pages/booking/select-address/index'
		};
	}
})